home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MYUTIL / REPAIRLI.M < prev    next >
Encoding:
Text File  |  1992-06-04  |  2.8 KB  |  91 lines

  1. MODULE RepairLIB;
  2. (*
  3.  * Dieses Modul korrigiert die Lib-Datei MM2LIB.M2L (vom 20.11.91),
  4.  * die beim aktuellen System 2.3 mitgeliefert wird.
  5.  * Die Lib-Datei enthält zu Beginn einen leeren Dateieintrag, welcher
  6.  * es unmöglich macht, die einzelnen Dateien auf der Library mit dem
  7.  * LibManager-Programm herauszukopieren.
  8.  *
  9.  * Dieses Programm muß übersetzt und dann von der Shell aus gestartet
  10.  * werden. Es sucht dann selbsttätig die Lib-Datei und ändert den
  11.  * fehlerhaften Namen in "DUMMY" um. Ist die Lib-Datei nicht defekt,
  12.  * weil sie schon korrigiert wurde, passiert auch nichts.
  13.  * Achtung: Die Datei "DUMMY" darf nicht mit dem LibManager gelöscht
  14.  * werden, denn das würde die Lib-Datei zerstören. Stattdessen sollten
  15.  * besser alle Dateien aus der Lib-Datei mittels des LibManagers
  16.  * herauskopiert werden, die Lib-Datei gelöscht, und dann die Dateien
  17.  * wieder in eine neu erzeugte Lib-Datei "MM2DEF.M2L" kopiert werden.
  18.  *)
  19.  
  20. IMPORT MOSGlobals, Files, Binary;
  21. FROM InOut IMPORT WriteLn, WriteString, Read;
  22. FROM Paths IMPORT SearchFile, ListPos;
  23. FROM Directory IMPORT FileAttrSet;
  24. FROM Strings IMPORT String;
  25. FROM ShellMsg IMPORT DefPaths, DefLibName;
  26.  
  27. TYPE
  28.   LibHead = RECORD
  29.     str: ARRAY [0..7] OF CHAR;
  30.     layout: CARDINAL;
  31.     fileSize: LONGCARD;
  32.     start: LONGCARD;
  33.     entries: CARDINAL;
  34.   END;
  35.  
  36.   LibEntry = RECORD
  37.      name: ARRAY [0..11] OF CHAR;
  38.      attr: FileAttrSet;
  39.      time: CARDINAL;
  40.      date: CARDINAL;
  41.      size: LONGCARD;
  42.      start: LONGCARD
  43.    END;
  44.  
  45. VAR     f: Files.File;
  46.         found: BOOLEAN;
  47.         name: MOSGlobals.FileStr;
  48.         ch: CHAR;
  49.         lh: LibHead;
  50.         le: LibEntry;
  51.  
  52. BEGIN
  53.   name:= DefLibName;
  54.   SearchFile (name, DefPaths, fromStart, found, name);
  55.   IF ~found THEN
  56.     WriteString ("Die Datei ");
  57.     WriteString (name);
  58.     WriteString (" ist nicht auf den Def-Pfaden zu finden.");
  59.   ELSE
  60.     Files.Open (f, name, Files.readWrite);
  61.     Binary.ReadBlock (f, lh);
  62.     IF lh.start # $1E4AE THEN
  63.       WriteString ("Die Datei ");
  64.       WriteString (name);
  65.       WriteString (" ist nicht defekt.");
  66.     ELSE
  67.       Binary.Seek (f, lh.start, Binary.fromBegin);
  68.       Binary.ReadBlock (f, le);
  69.       IF le.name[0] # 0C THEN
  70.         WriteString ("Die Datei ");
  71.         WriteString (name);
  72.         WriteString (" scheint bereits repariert zu sein.");
  73.       ELSE
  74.         WITH le DO
  75.           name:= "DUMMY"; attr:= FileAttrSet{};
  76.           time:= 0; date:= 0; size:= 0; start:= 0;
  77.         END;
  78.         Binary.Seek (f, lh.start, Binary.fromBegin);
  79.         Binary.WriteBlock (f, le);
  80.         WriteString ("Die Datei ");
  81.         WriteString (name);
  82.         WriteString (" ist repariert.");
  83.       END
  84.     END;
  85.     Files.Close (f)
  86.   END;
  87.   WriteLn;
  88.   WriteString ("Taste...");
  89.   Read (ch);
  90. END RepairLIB.
  91.